home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / snz128s / src / st.c < prev    next >
C/C++ Source or Header  |  1994-04-13  |  5KB  |  243 lines

  1. /*
  2.     st.c - Video and ST related function
  3.  
  4.     David Nash - dnash@chaos.demon.co.uk
  5.     Graham Judd - gjudd@siward.demon.co.uk
  6. */
  7.  
  8. /* $Id: ST.C,v 1.2 1994/02/05 18:50:32 gbj Exp user $ */
  9.  
  10. /*
  11. $Log: ST.C,v $
  12. // Revision 1.2  1994/02/05  18:50:32  gbj
  13. // Beta release
  14. //
  15. // Revision 1.1  1994/01/30  17:25:46  gbj
  16. // Initial revision
  17. //
  18. // Revision 2.5  1994/01/30  00:31:58  gbj
  19. // Release 940130
  20. //
  21. // Revision 2.4  1994/01/23  03:54:26  gbj
  22. // Beta release.
  23. //
  24. // Revision 2.3  1994/01/23  03:50:00  gbj
  25. // Added missing v_clsvwk to v_init.
  26. //
  27. // Revision 2.2  1994/01/23  00:08:44  gbj
  28. // Added reverse video on/off when setting foreground/background colours.
  29. //
  30. // Revision 2.1  1994/01/22  16:20:18  gbj
  31. // First clean compile by GBJ
  32. //
  33. */
  34.  
  35. #include <dos.h>
  36. #include <stdarg.h>
  37. #include <stdio.h>
  38. #include <conio.h>
  39. #include <string.h>
  40. #include <osbind.h>
  41. #include <aes.h>                                    /* AES prototypes and defs             */
  42. #include <vdi.h>                                    /* VDI prototypes and defs             */
  43.  
  44. #include "screen.h"
  45. #include "st.h"
  46.  
  47. short work_in[11] = {1,1,1,1,1,1,1,1,1,1,2};    /* v_opnvwk input array            */
  48. short work_out[57];                                    /* v_opnvwk output array        */
  49.  
  50. short handle;                                        /* virtual workstation handle     */
  51. short junk;                                            /* dummy variable                     */
  52.  
  53. unsigned char scr_rows;
  54. unsigned char scr_cols;
  55. short ascr_rows;                                     /* number of lines on screen         */
  56. short ascr_cols;                                     /* number of columns on screen    */
  57.  
  58. /* scr_attrib contains the required text attributes */
  59. static int scr_attrib = 0x07; /* black on white */
  60.  
  61. /* Flag for Direct Video or Video Bios screen output */
  62. static int scr_direct = 0;  /* 0 = Bios video, 1 = Direct video */
  63.                             /* 2 = Nick's black-on-white setup */
  64.                             /* preset to 0 to force initialise to use Bios */
  65.  
  66. /* Cursor location for Direct Video */
  67. static unsigned scr_seg;
  68.  
  69. short scr_x, scr_y;                                /* 0 to scr_cols-1, 0 to scr_rows-1 */
  70.  
  71. /* Formatting buffer for printf */
  72. /* static char printf_text[50*80 + 1]; */ /* enough for a screenful at 50lines*80cols */
  73.  
  74. /* set attributes */
  75.  
  76. void textbackground(int newcolour)
  77. {
  78.     scr_attrib = (scr_attrib & 0x07) | ((newcolour & 0x07) << 4);
  79.     if (newcolour == BLACK)
  80.         printf("\033q");
  81.     else if (newcolour == LIGHTGRAY)
  82.         printf("\033p");
  83. }
  84.  
  85. void  textcolor(int newcolour)
  86. {
  87.     scr_attrib = (scr_attrib & 0xf0) | (newcolour & 0x0f);
  88.     if (newcolour == BLACK)
  89.         printf("\033q");
  90.     else if (newcolour == LIGHTGRAY)
  91.         printf("\033p");
  92. }
  93.  
  94. /* clear to end: emit the aproppriate number
  95.  * of spaces, without moving cursor.
  96.  */
  97.  
  98. void clreol(void)
  99. {
  100.     printf("\033K");                                /* Clear to EOL                        */
  101. }
  102.  
  103. /* clear screen: clear all and set cursor home */
  104.  
  105. void clrscr(void)
  106. {
  107.     printf("\033E");                                /* Clear screen and Home cursor    */
  108.    scr_x = scr_y = 0;
  109. }
  110.  
  111. /* add line: scroll rest of screen down */
  112.  
  113. void insline(void)
  114. {
  115.     printf("\033L");                                /* Add line, scroll scr down        */
  116. }
  117.  
  118. /* delete line: scroll rest up */
  119.  
  120. void delline(void)
  121. {
  122.     printf("\033M");                                /* Del line, scroll scr up            */
  123. }
  124.  
  125. /* set cursor */
  126.  
  127. void gotoxy(int x, int y)
  128. {
  129.     printf("\033Y%c%c", y+31, x+31);        /* Position cursor                    */
  130.     scr_x = x-1;
  131.     scr_y = y-1;
  132. }
  133.  
  134. /* put character: set attribute first, then execute char.
  135.  * Also remember if current line has changed.
  136.  */
  137.  
  138. int putch(int ch)
  139. {
  140.     printf("%c", ch);
  141.     
  142.     switch (ch) {
  143.        case '\r':
  144.             break;
  145.         case '\n':
  146.             scr_x = 0;
  147.             if (scr_y < scr_rows)
  148.                 scr_y++;
  149.             break;
  150.         default:
  151.             if (scr_x < scr_cols)
  152.                 scr_x++;
  153.     }
  154.     return ch;
  155. }
  156.  
  157. /* determine number of screen columns. Also set attrset according
  158.  * to monochrome/color screen.
  159.  */
  160.  
  161. #if 0
  162. int v_cols(void)
  163. {
  164.     return 80;
  165. }
  166.  
  167. /* Get the number of rows 
  168.  */
  169.  
  170. int v_rows(void)
  171. {
  172.     return 25;
  173. }
  174. #endif
  175.  
  176. #if 0
  177. /* Write a character to the screen */
  178.  
  179. int cputs(const char *s)
  180. {
  181.     while (*s)
  182.     {
  183.         putch(*s);
  184.         s++;
  185.     }
  186.     return strlen(s);
  187. }
  188. #endif
  189.  
  190. /* Scroll the screen up one line with start at the top */
  191.  
  192. void scroll_up(int start)
  193.  
  194. {
  195. int tem_y;
  196.  
  197.     tem_y = scr_y;
  198.  
  199.     gotoxy(1, start);
  200.     delline();
  201.     gotoxy(1, tem_y);
  202. }
  203.  
  204.  
  205. /*
  206.     v_init() - initialise the video package
  207.               use the vdi to find the number of rows & columns
  208. */
  209.  
  210. void v_init(int directvideo)
  211. {
  212.     appl_init();                                    /* start AES                 */
  213.     handle=graf_handle(&junk, &junk, &junk, &junk);    /* find AES handle         */
  214.     v_opnvwk(work_in, &handle, work_out);            /* open workstation         */
  215.     vq_chcells(handle, &ascr_rows, &ascr_cols);        /* get # rows and cols    */
  216.     v_clsvwk(handle);                    /* close workstation */
  217.     appl_exit();                                /* exit AES                    */
  218.     scr_rows = (unsigned char)ascr_rows;
  219.     scr_cols = (unsigned char)ascr_cols;
  220. #if 0
  221.     scr_rows = v_rows() ;
  222.     scr_cols = v_cols() ;
  223. #endif
  224.     clrscr();
  225. }
  226.  
  227. #if 0
  228. int    farcoreleft(void)
  229. {
  230. /*    return sizmem(); */
  231. /*    return 500*1024; */
  232.     return (int)Malloc(-1);    /* based on coreleft() in ext.h */
  233. }
  234. #endif
  235.  
  236. #if 0
  237. int findfirst(char name[], void *dta, short attrib)
  238. {
  239.     Fsetdta(dta);
  240.     return Fsfirst(name, attrib);
  241. }
  242. #endif
  243.